package cn.iocoder.yudao.module.eval.service.candidate;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.eval.controller.admin.candidate.vo.*;
import cn.iocoder.yudao.module.eval.dal.dataobject.candidate.EvalCandidateInfoDO;
import cn.iocoder.yudao.module.eval.dal.mysql.candidate.EvalCandidateInfoMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 参评人员 Service 实现类
 *
 * @author 芋道源码
 */
@Service
public class EvalCandidateServiceImpl implements EvalCandidateService {

    @Resource
    private EvalCandidateInfoMapper candidateInfoMapper;

    @Override
    public Long createCandidate(@Valid EvalCandidateInfoSaveReqVO createReqVO) {
        // 转换为DO对象
        EvalCandidateInfoDO candidate = BeanUtils.toBean(createReqVO, EvalCandidateInfoDO.class);

        // 插入数据库
        candidateInfoMapper.insert(candidate);

        return candidate.getId();
    }

    @Override
    public void updateCandidate(@Valid EvalCandidateInfoSaveReqVO updateReqVO) {
        // 转换为DO对象
        EvalCandidateInfoDO candidate = BeanUtils.toBean(updateReqVO, EvalCandidateInfoDO.class);

        // 更新数据库
        candidateInfoMapper.updateById(candidate);
    }

    @Override
    public void deleteCandidate(Long id) {
        // 删除参评人员
        candidateInfoMapper.deleteById(id);
    }

    @Override
    public EvalCandidateInfoDO getCandidate(Long id) {
        return candidateInfoMapper.selectById(id);
    }

    @Override
    public List<EvalCandidateInfoDO> getCandidateList(Collection<Long> ids) {
        return candidateInfoMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<EvalCandidateInfoDO> getCandidatePage(EvalCandidateInfoPageReqVO pageReqVO) {
        return candidateInfoMapper.selectPage(pageReqVO);
    }

    @Override
    public Object importCandidates(Long planId, List<EvalCandidateInfoSaveReqVO> list) {
        // TODO: 实现批量导入参评人员逻辑
        return "导入成功";
    }

    @Override
    public void batchAddCandidatesToPlan(Long planId, List<Long> candidateIds) {
        // TODO: 实现批量添加参评人员到计划逻辑
    }

    @Override
    public void batchRemoveCandidatesFromPlan(Long planId, List<Long> candidateIds) {
        // TODO: 实现批量从计划中移除参评人员逻辑
    }

    @Override
    public List<EvalCandidateInfoDO> getCandidatesByPlan(Long planId) {
        return candidateInfoMapper.selectListByPlanId(planId);
    }

    @Override
    public Object getCandidateStatistics(Long planId) {
        // TODO: 实现参评人员统计逻辑
        return "统计信息";
    }

    @Override
    public void qualificationReview(EvalCandidateQualificationReviewReqVO reviewReqVO) {
        // TODO: 实现资格审核逻辑
    }

    @Override
    public void batchQualificationReview(EvalCandidateBatchQualificationReviewReqVO batchReviewReqVO) {
        // TODO: 实现批量资格审核逻辑
    }

    @Override
    public PageResult<EvalCandidateInfoDO> getPendingQualificationReview(Long planId, EvalCandidateInfoPageReqVO pageReqVO) {
        // TODO: 实现获取待审核参评人员逻辑
        return new PageResult<>(List.of(), 0L);
    }

    @Override
    public Object getQualificationReviewStatistics(Long planId) {
        // TODO: 实现资格审核统计逻辑
        return "审核统计";
    }

    @Override
    public void updateRegistrationStatus(Long id, Integer registrationStatus) {
        // TODO: 实现更新报名状态逻辑
    }

    @Override
    public List<EvalCandidateInfoDO> searchCandidates(String keyword, Long planId) {
        // TODO: 实现搜索参评人员逻辑
        return List.of();
    }

    @Override
    public List<EvalCandidateInfoDO> getCandidateListByAuditStatus(Integer auditStatus) {
        return candidateInfoMapper.selectListByAuditStatus(auditStatus);
    }

}
